
// Jpush.app.1.6.0
// 作者 : 立树
// 日期 : 2018-11-28
// 来源 : hhtools.app.js
// 文档 : http://studio.houheaven.com

// 更新 :
// push_click() 改名为 MessageProc()，并将其暴露出来，以供 APP 消息列表共用

// 极光推送 ID 初始化
function Jpushid_Init(elm)
{
	var jpushid = localdata.get("jpushid");
	if( !jpushid )
	{
		var jpush = api.require("ajpush");
		jpush.getRegistrationId(function(ret){
			jpushid = ret.id;
		    localdata.set("jpushid",jpushid);
		    Console("Jpushid : "+jpushid);
		    $(elm).val(jpushid);
		});
	}
	else
		$(elm).val(jpushid);
}

// 极光推送 初始化
function Jpush_Init()
{
	jpush = api.require("ajpush");

	// 调试模式
	if( !jpush )
	{
		api.toast({msg:"调试模式不能推送消息"});
		return;
	}

	// 系统兼容
	if( api.systemType!="ios" )
	{
		// 安卓推送消息
		jpush.init(function(ret,err){	// 安卓需要手动初始化，苹果会自动初始化
			if( ret && ret.status )
			{
				// 获取 Jid
				CreateJid();

				// 内部推送（setNotification）
				// 安卓手机 setListener 只能监听发送到 APP 内部的消息，外部推送监听不到
				// 此处监听的事件：logout（禁止多端登录，当用户在一个终端上登录时，其他终端自动退出）
				jpush.setListener(function(ret){

					// 消息初始化
					var notice = {
						descp: ret.content,
						type: ret.extra.type,
						data: JSON.parse(ret.extra.data),
						push: ret.extra.push_type,
						silent: ret.extra.silent
					};
					MessageProc(notice);

				});

				// 外部推送（AndroidNotification）
				api.addEventListener({name:"appintent"},function(ret,err){

					// 部分安卓机器，会执行两次，其中一次没有值，程序会报错，因此此处要判断一下
					if( ret.appParam.ajpush )
					{
						var data = ret.appParam.ajpush;
						var notice = {
							descp: data.content,
							type: data.extra.type,
							data: JSON.parse(data.extra.data),
							push: data.extra.push_type,
							silent: data.extra.silent
						};
						MessageProc(notice);
					}

				});
			}
			else
				console.log("出错：激光推送模块初始化失败!");
		});
	}
	else
	{
		// 苹果推送消息
		jpush.setListener(function(ret){

			// 消息初始化
			var notice = {
				descp: ret.content,
				type: ret.extra.type,
				data: JSON.parse(ret.extra.data),
				push: ret.extra.push_type,
				silent: ret.extra.silent
			};

			if( notice.push=="inner" )
			{
				// 内部推送（服务端：setNotification）
				// IOS 7-10（7.1、8.4、9.3、10.1），激活模式与后台模式，setListener 均能监听到事件，消息推送事件均只能由开发者自己处理
				MessageProc(notice);
			}
			else
			{
				// 外部推送（服务端：addPlatformNotification）
				// ios 7.1  : 激活模式，setListener 监听到，事件由开发者处理；后台模式，setListener 监听不到事件，消息推送由苹果系统自己处理
				// ios 8.4  : 激活模式，setListener 监听到，事件由开发者处理；后台模式，setListener 监听不到事件，消息推送由苹果系统自己处理
				// ios 9.3  : 激活模式，setListener 监听到，事件由开发者处理；后台模式，setListener 监听不到事件，消息推送由苹果系统自己处理
				// ios 10.1 : 激活模式与后台模式，setListener 均监听不到事件，消息推送均由苹果系统自己处理
				api.confirm({msg:notice.descp,buttons:["取消","确定"]},function(ret){
					if( ret.buttonIndex==2 )
					{
						MessageProc(notice);
					}
				});

				// notification
				// IOS 7-10：
				// 激活模式，顶边出现为时 5 秒的黑色内部推送消息（只有新消息三个字，看不到推送消息内容）
				// 后台模式，系统自动处理（推送到消息栏）
				// 安卓：
				// 激活模式，弹出一个推送，后台模式，弹出两个推送
//				api.notification({
//				    notify:{title:api.appName,content:"新的聊天消息",extra:"hhim_chat",updateCurrent:true}
//				});

				// 新消息提醒（红点）
				if( notice.push=="outer" )
				{
					api.sendEvent({name:"evt_NewNotice"});
				}
			}

		});

		// 获取 Jid
		CreateJid();
	}

	// 应用激活时清除角标
	jpush.setBadge({badge:0});
	api.addEventListener({name:"resume"},function(ret,err){
        jpush.setBadge({badge:0});
    });

	// 推送被点击
	// noticeclicked 用来专门处理 api.notification()，苹果和安卓通用。
	api.addEventListener({name:"noticeclicked"},function(ret,err){
		data = hhJson.parse(ret.value);
		if( data.extra )
		{
			// 为了兼容聊天
			notice = {
				descp: data.content,
				type: data.extra.type,
				data: JSON.parse(data.extra.data),
				push: data.extra.push_type,
				silent: data.extra.silent
			};
			MessageProc(notice);
		}
	});

	// 初始化（把 ID 写到缓存里面）
	// Jid 有时会因为网络问题，无法从极光服务器正确的获取到，如果遇到这种情况，会再次请求，
	// 直到获取为止，这时其他需要 Jid 的页面就得手动的更新数据（localdata.get(jpushid)）
	var timer,jpushid;
	function CreateJid()
	{
		jpush.getRegistrationId(function(ret){
			jpushid = ret.id;
		    localdata.set("jpushid",jpushid);
		    Console("Jpushid : "+jpushid);
		});

		setTimeout(function(){
			if( jpushid ) return;
			// url = "appinfo";
			// param = {
			// 	appVersion: api.appVersion,
			// 	systemType: api.systemType,
			// 	systemVersion: api.systemVersion,
			// 	deviceName: api.deviceName,
			// 	deviceId: api.deviceId,
			// 	deviceModel: api.deviceModel,
			// 	deviceToken: api.deviceToken
			// };
			// Ajax(url,param);
		},2000);
	}
}

// 推送点击处理
function MessageProc(notice)
{
	// 事件处理
	switch(notice.type)
	{
		// 配送员审核通过
		case "delivery_user_review_success":
			api.sendEvent({name:"evt_UserinfoChange"});
			api.alert({msg:"您已通过系统审核，正式成为了一名配送员~"});
			break;
		// 新订单
		case "caocao_express_user_new_order":
			if(Boolean(localdata.get("notify_voice")))
			{
				api.startPlay({path: 'widget://res/notify.mp3'});
			}
			api.sendEvent({name:'newOrder'});
			break;
		// 新订单
		case "delivery_push_test":
			api.startPlay({path:'widget://res/voice_test.mp3'});
			api.sendEvent({name:"evt_VoiceTest"});
			break;
		case "evt_newUpstaireOrder":
			if(Boolean(localdata.get("notify_voice")))
			{
				api.startPlay({path: 'widget://res/notify.mp3'});
			}
			api.sendEvent({name:"evt_newUpstaireOrder"});
			break;
		// 退出登录
		case "logout":
			api.sendEvent({name:"evt_UserLogout"});
			api.alert({msg:notice.descp});
	        break;
	}

	// 点击推送后，将消息通知中对应的消息设为已读
//	if( !notice.state )
//	{
//		AjaxSafe({
//			url: "notice/read",
//			data: {id:notice.id}
//		});
//		notice.state = 1;
//
//		api.sendEvent({name:"evt_NoticeChange"});
//	}

	// 清除角标
	if( typeof(jpush)!="undefined" )
	{
		jpush.setBadge({badge:0});
	}
}
